// 创建用户集合
// 引入mongoose模块
const mongoose = require("mongoose");
// 引入哈希加密模块
// const bcrypt = require("bcrypt");
// 引入joi验证模块
const Joi = require('joi');
// 设定集合规则
const userSchema = new mongoose.Schema({
  username: {
    type: String,
    required: true,
    unique: true, // 保证用户名在插入数据库时不重复
    minlength: 2,
    maxlength: 20,
  },
  email: {
    type: String,
    // unique: true, // 保证邮箱地址在插入数据库时不重复
    // required: true,
  },
  password: {
    type: String,
    required: true,
  },
  avatar: {
    type: String,
  },
  role: {
    type: String, // admin管理员，normal普通用户
    // required: true,
  },
  state: {
    type: Number,
    default: 0, // 0启用状态，1禁用状态
  },
});

// 创建集合
const User = mongoose.model("User", userSchema);

// async function createUser () {
// 	const salt = await bcrypt.genSalt(10);
// 	const pass = await bcrypt.hash('admin', salt);
// 	const user = await User.create({
// 		username: 'admin',
// 		email: 'admin@qq.com',
// 		password: pass,
//     avatar:'/images/admin.jpg',
// 		role: 'admin',
// 		state: 0,
// 	});
// }
// createUser();

const validateUser = (user) => {
  // 定义验证规则
  const userRole = {
    username: Joi.string()
      .min(2)
      .max(10)
      .required()
      .error(new Error("用户名不符合")),
    password: Joi.string()
      .required()
      .regex(/^[a-zA-Z0-9]{3,30}$/)
      .error(new Error("非法密码")),
    email: Joi.string().email().error(new Error("邮箱格式不符合")),
    role: Joi.string().valid("normal", "admin").error(new Error("没有此角色")),
    state: Joi.number().valid(0, 1).error(new Error("非法状态")),
  };
  // 实施验证
  return Joi.validate(user, userRole);
};

// 导出模块
module.exports = {
  User,
  validateUser,
};